package learn.up.java.designMode.observer;

import java.util.ArrayList;
import java.util.List;

/**
 *目标对象，他知道观察他的观察者，并提供注册和删除观察者的接口
 * @author NANUTO
 * @date 2017年11月26日 下午8:28:07
 */
public class Subject {

	/**
	 * 用一个集合对象用来存放注册的观察者对象
	 */
	private List<Observer> observers;
	
	public Subject () {
		observers = new ArrayList<>();
	}
	
	/**
	 * 注册一个观察者
	 * @param observer
	 */
	public void attach(Observer observer) {
		observers.add(observer);
	}
	
	/**
	 * 删除指定的观察者
	 * @param observer
	 */
	public void detach(Observer observer) {
		observers.remove(observer);
	}
	
	/**
	 * 通知所有的观察者对象
	 */
	protected void notifyObservers() {
		for (Observer item : observers) {
			item.update(this);
		}
	}
}
